package com.fau.wm.service;

import java.util.List;
import java.util.Map;

import com.fau.wm.entity.MedicalAdmin;
import com.fau.wm.entity.MedicalAllocation;
import com.fau.wm.entity.MedicalAllocationDetail;
import com.fau.wm.entity.MedicalInStock;
import com.fau.wm.entity.MedicalInventoryDetail;
import com.fau.wm.entity.MedicalRecallDetail;
import com.fau.wm.entity.MedicalStorageDetail;
import com.fau.wm.entity.MedicalWarehouse;
import com.fau.wm.util.Page;

/**
 * @desc 库存管理接口
 * @author kangyj
 * @datetime 2014年8月8日,下午6:04:27
 */
public interface IInStockManagerService {
	
	/**
	 * @desc 查询到达提醒数的药品
	 * @param medicine 查询条件
	 * @param map 分页参数
	 * @return Page
	 * @author liy
	 * @datetime 2014年12月22日,上午10:45:04
	 */
	public List<MedicalInStock> findMedicineUnderWarn();
	
	/**
	 * @desc 入库增加、保存库存
	 * @author kangyj
	 * @datetime 2014年8月9日,上午11:38:50
	 */
	public void saveInStock(List<MedicalStorageDetail> storageDetailList);
	
	/**
	 * @desc 分页查询库存列表
	 * @param map
	 * @param inventory
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月11日,上午11:25:55
	 */
	public Page findInStockByPage(Map<String, Object> map, MedicalInStock inStock);
	
	/**
	 * @desc 出库减库存
	 * @param recallDetailList
	 * @author kangyj
	 * @datetime 2014年8月14日,下午4:57:07
	 */
	public void recallMinusInStock(List<MedicalRecallDetail> recallDetailList);
	
	/**
	 * @desc 检测库存是否充足
	 * @param medicineId
	 * @param quantity
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月14日,下午2:17:15
	 */
	public Boolean checkMedicineInStock(String medicineId, String warehouseId, Integer quantity);
	
	/**
	 * @desc 盘点更新库存
	 * @author kangyj
	 * @datetime 2014年8月20日,上午11:09:56
	 */
	public void inventoryUpdateInStock(List<MedicalInventoryDetail> inventoryDetailList);
	
	/**
	 * @desc 保存调拨基本信息
	 * @param allocation
	 * @author kangyj
	 * @datetime 2014年8月20日,下午11:23:52
	 */
	public void saveAllocation(MedicalAllocation allocation, MedicalAdmin writeUser);
	
	/**
	 * @desc 验证输入的编号是否已存在
	 * @param serialNum
	 * @return
	 * @author suny
	 * @datetime 2014年9月4日,下午3:21:33
	 */
	public Boolean verSerialNum(String serialNum,String hospitalId);
	
	/**
	 * @desc 保存修改调拨基本信息
	 * @param allocation
	 * @author kangyj
	 * @datetime 2014年8月20日,下午11:34:32
	 */
	public void saveEditAllocation(MedicalAllocation allocation);
	
	/**
	 * @desc 删除调拨基本信息
	 * @param allocation
	 * @author kangyj
	 * @datetime 2014年8月20日,下午11:36:10
	 */
	public void delAllocation(MedicalAllocation allocation);
	
	/**
	 * @desc 分页查询库存调拨
	 * @param map 分页参数
	 * @param allocation
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月20日,下午11:40:14
	 */
	public Page findAllocationByPage(Map<String, Object> map, MedicalAllocation allocation);
	
	/**
	 * @desc 保存调拨详细
	 * @param allocationDetail
	 * @author kangyj
	 * @datetime 2014年8月21日,上午12:16:50
	 */
	public void saveAllocationDetail(MedicalAllocationDetail allocationDetail);
	
	/**
	 * @desc 保存修改调拨详细
	 * @param allocationDetail
	 * @author kangyj
	 * @datetime 2014年8月21日,上午12:19:40
	 */
	public void saveEditAllocationDetail(MedicalAllocationDetail allocationDetail);
	
	/**
	 * @desc 删除调拨详细
	 * @param allocationDetail
	 * @author kangyj
	 * @datetime 2014年8月21日,上午12:20:31
	 */
	public void delAllocationDetail(MedicalAllocationDetail allocationDetail);
	
	/**
	 * @desc 查询仓库集合
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月21日,下午2:11:54
	 */
	public List<MedicalWarehouse> findWarehouseList();
	
	/**
	 * @desc 查询库存调拨
	 * @param allocationId 调拨基本信息Id
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月21日,下午4:59:57
	 */
	public List<MedicalAllocationDetail> findallocationDetailList(String allocationId);
	
	/**
	 * @desc 检查调拨详细表中药品是否已存在
	 * @param medicineId 药品id
	 * @param allocationId 调拨表id
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月21日,下午6:26:35
	 */
	public Boolean checkMedicineExist(String medicineId, String allocationId);
	
	/**
	 * @desc 查询调拨审核列表
	 * @param map
	 * @param allocation
	 * @return
	 * @author kangyj
	 * @datetime 2014年8月25日,下午5:02:58
	 */
	public Page findAllocationAuditByPage(Map<String, Object> map, MedicalAllocation allocation);
	
	/**
	 * @desc 更新调拨状态
	 * @param status 状态值
	 * @param id 调拨id
	 * @author kangyj
	 * @datetime 2014年8月26日,上午11:48:20
	 */
	public void updateAllocationStatus(String status, String id);
	
	/**
	 * @desc 更新审核人
	 * @param auditUser	审核人
	 * @param id调拨id
	 * @author kangyj
	 * @datetime 2014年8月26日,上午11:56:35
	 */
	public void updateAuditUser(MedicalAdmin auditUser, String id);	
	
	/**
	 * @desc 完成调拨
	 * @param allocationDetailList 调拨详细集合
	 * @param allocationId 调拨表id
	 * @author kangyj
	 * @datetime 2014年8月26日,下午12:13:22
	 */
	public void allocation(List<MedicalAllocationDetail> allocationDetailList, String allocationId);
	
	/**
	 * @desc 查询指定仓库指定药品调出记录
	 * @param map分页参数
	 * @param medicineId药品ID
	 * @param warehouseId仓库ID
	 * @return Page
	 * @author liy
	 * @datetime 2014年12月24日,上午4:44:08
	 */
	public Page findAllocationOut(Map<String, Object> map,String medicineId,String warehouseId);
	
	/**
	 * @desc 查询指定仓库指定药品调入记录
	 * @param map分页参数
	 * @param medicineId药品ID
	 * @param warehouseId仓库ID
	 * @return Page
	 * @author liy
	 * @datetime 2014年12月24日,上午8:41:49
	 */
	public Page findAllocationIn(Map<String, Object> map,String medicineId,String warehouseId);
	
	/**
	 * @desc 提交调拨审核
	 * @param sid 调拨单Id
	 * @author liy
	 * @datetime 2014年12月24日,上午11:46:24
	 */
	public boolean toAudit(String sid);
	
	/**
	 * @desc 完成调拨时，验证产品是否存在
	 * @param allocationDetail
	 * @return
	 * @author kangyj
	 * @datetime 2015年3月11日,下午2:33:04
	 */
	public String validProExist(MedicalAllocationDetail allocationDetail);
}
